/**
 * @fileOverview 面包客户端统计组件，统计格式请参考数据组 《客户端日志格式定义》
 * @author yuguangcan
 * @date   2015-6-11
 * @version 1.0
 **/

window.BT = window.BT || {};
BT.log = {
    _imageUrl : "http://cli.breadtrip.com/br.png?data=",
    _imageReq : function(url){
        var n = "btlog_"+ new Date().getTime();
        //将image对象赋给全局变量，防止被当做垃圾回收，造成请求失败。
        var c = window[n] =new Image();
        c.onload=c.onerror=function(){
            //垃圾回收
            window[n]=null; 
        };
        c.src = url;
        c=null;//垃圾回收
    },
    //公共的请求参数，包括平台、版本、用户id
    _commonOption :[
        { 
            key : "platform",
            value : 4 
        },
        { 
            key : "version",
            value : '-'
        },
        { 
            key : "uid",
            value : BT.context('USER_ID') || 'anoy' 
        }
    ],
    /*
    * 模块和页面对应的统计id,只接受这里定义的模块和页面的相关统计
    * 有扩展时和数据组确认模块页面取值，并在这里添加
    */
    _moduleOption : {
        module : {
            trip : 1,
            waypoint : 2,
            place : 3,
            poi : 5,
            product : 6,
            user : 7
        },
        page : {
            trip : 1002
        }
    },
    _commonHeader : function(){
        var data = [];
        for(var i=0;i<this._commonOption.length;i++){
            var option = this._commonOption[i];
            data.push(option.value);
        }
        return data.join(";");
    },
    _moduleHeader : function(options){
        var data = [
            new Date().getTime(),
            this._moduleOption.module[options.module] || "-" ,
            this._moduleOption.page[options.page] || "-" 
        ]
        return data.join(";") + ":" + ( options.pageValue || "-" );
    },
    /**
     * @name log
     * @function
     * @description   发送统计请求 
     * @param {Object} {key:value}  统计项数据结构
     * @example
     * BT.log.log([
     *  {
     *    module : "trip",
     *    page : "trip",
     *    pageValue : '123',
     *    data : "1001:3000"
     *  },
     *  {
     *    module : "trip",
     *    page : "trip",
     *    pageValue : '123',
     *    data : "1001:3000"
     *  },
     * ])
     **/
    log : function(options){
        var data = [];
        if(Object.prototype.toString.call(options) === '[object Array]'){
            data = options;
        }else{
            data.push(options);
        }
        var logData =  this._commonHeader() + ">>>";
        for(var i =0;i<data.length;i++){
            if(i>0){
                logData += "###";
            }
            logData += this._moduleHeader(data[i])  + "@@@" + data[i].data;
        }
        this._imageReq(this._imageUrl + encodeURIComponent(logData));
    }
}